#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{
    //原神抽卡
    //五星角色基础概率为0.006,当73发之后每一抽如果没有抽中五星,则概率增加0.06,抽中五星时有0.5概率是up角色,如果抽中非up角色,下一次出五星必为up角色
    //四星基础概率为0.051,四星角色和四星武器的概率分别为0.0255,十抽中必出一个四星角色或武器,抽中四星时有0.5概率为up四星,如果当前四星不为up四星,下一个抽到的四星即为up四星
    //其余均为三星武器
    srand(time(NULL));

    float Five_role = 0.006;//五星基础概率
    float four = 0.051;//四星物品基础概率
    float four_role = 0.0255;//四星武器基础概率
    float four_weapons =0.0255;//四星武器基础概率
    float up_four_role = 0.5;

    int five_num =0;//记录抽到五星角色之前的抽数,抽到就清零
    int four_num =0;//记录抽到四星物品之前的抽数,抽到就清零
    int four_baodi = 0;//歪非up四星的话置1,下一次抽到四星保证是up角色,然后清零
    int five_baodi = 0;//歪非up五星的话置1,下一次抽到五星保证是up角色,然后清零

    int i_num = 10000;//设定抽的数量
    int five_i_num = 0;//记录出过多少五星的数量
    int five_up_num = 0;//记录出过多少五星up的数量
    int four_i_num = 0;//记录出过多少四星的数量
    int four_up_num = 0;//记录出过多少四星up的数量


    for (int i = 0; i < i_num; i++)
    {
        int a = rand()%10000;//概率已经到0.0255,所以在取模时要用到一万
        if(a<Five_role*10000)
        {
            int b = rand()%14;
            if(b<7||five_baodi==1)
            {
                printf(" 五星up角色 : 钟离\n");
                five_baodi = 0;
                five_up_num++;
            }
            else
            {
                switch (b)
                {
                case 7:printf(" 五星常驻角色 : 七七\n");
                    break;
                case 8:printf(" 五星常驻角色 : 莫娜\n");
                    break;
                case 9:printf(" 五星常驻角色 : 迪卢克\n");
                    break;
                case 10:printf(" 五星常驻角色 : 琴\n");
                    break;
                case 11:printf(" 五星常驻角色 : 迪希雅\n");
                    break;
                case 12:printf(" 五星常驻角色 : 刻晴\n");
                    break;
                case 13:printf(" 五星常驻角色 : 提纳里\n");
                    break;
                }
                five_baodi = 1;
            }
            five_i_num++;
            four_num++;
            five_num = 0;
            Five_role = 0.006;
        }
        else if (a<(Five_role+four_role)*10000||four_num>8)
        {
            int c = rand()%94;
            if(c<47||four_baodi==1)
            {
                int e = rand()%3;
                switch (e)
                {
                case 0:printf(" 四星up角色 : 菲米尼\n");
                       break;
                case 1:printf(" 四星up角色 : 早柚\n");
                       break;
                case 2:printf(" 四星up角色 : 诺艾尔\n");
                       break;
                default:break;
                }
                four_baodi = 0;
                four_up_num++;
            }
            else
            {
                switch (c)
                {
                case 47:printf(" 四星常驻角色 : 米卡\n");
                        break;
                case 48:printf(" 四星常驻角色 : 珐露珊\n");
                        break;
                case 49:printf(" 四星常驻角色 : 坎蒂丝\n");
                        break;
                case 50:printf(" 四星常驻角色 : 柯莱\n");
                        break;
                case 51:printf(" 四星常驻角色 : 云堇\n");
                        break;
                case 52:printf(" 四星常驻角色 : 鹿野院平藏\n");
                        break;
                case 53:printf(" 四星常驻角色 : 五郎\n");
                        break;
                case 54:printf(" 四星常驻角色 : 烟绯\n");
                        break;
                case 55:printf(" 四星常驻角色 : 辛焱\n");
                        break;
                case 56:printf(" 四星常驻角色 : 迪奥娜\n");
                        break;
                case 57:printf(" 四星常驻角色 : 班尼特\n");
                        break;
                case 58:printf(" 四星常驻角色 : 凝光\n");
                        break;
                case 59:printf(" 四星常驻角色 : 北斗\n");
                        break;
                case 60:printf(" 四星常驻角色 : 雷泽\n");
                        break;
                case 61:printf(" 四星常驻角色 : 卡维\n");
                        break;
                case 62:printf(" 四星常驻角色 : 瑶瑶\n");
                        break;
                case 63:printf(" 四星常驻角色 : 莱依拉\n");
                        break;
                case 64:printf(" 四星常驻角色 : 多莉\n");
                        break;
                case 65:printf(" 四星常驻角色 : 久岐忍\n");
                        break;
                case 66:printf(" 四星常驻角色 : 绮良良\n");
                        break;
                case 67:printf(" 四星常驻角色 : 九条裟罗\n");
                        break;
                case 68:printf(" 四星常驻角色 : 托马\n");
                        break;
                case 69:printf(" 四星常驻角色 : 罗莎莉亚\n");
                        break;
                case 70:printf(" 四星常驻角色 : 砂糖\n");
                        break;
                case 71:printf(" 四星常驻角色 : 重云\n");
                        break;
                case 72:printf(" 四星常驻角色 : 菲谢尔\n");
                        break;
                case 73:printf(" 四星常驻角色 : 行秋\n");
                        break;
                case 74:printf(" 四星常驻角色 : 香菱\n");
                        break;
                case 75:printf(" 四星常驻角色 : 芭芭拉\n");
                        break;
                case 76:printf(" 四星常驻武器 : 弓藏\n");
                        break;
                case 77:printf(" 四星常驻武器 : 绝弦\n");
                        break;
                case 78:printf(" 四星常驻武器 : 昭心\n");
                        break;
                case 79:printf(" 四星常驻武器 : 流浪乐章\n");
                        break;
                case 80:printf(" 四星常驻武器 : 西风长枪\n");
                        break;
                case 81:printf(" 四星常驻武器 : 雨裁\n");
                        break;
                case 82:printf(" 四星常驻武器 : 钟剑\n");
                        break;
                case 83:printf(" 四星常驻武器 : 匣里龙吟\n");
                        break;
                case 85:printf(" 四星常驻武器 : 笛剑\n");
                        break;
                case 86:printf(" 四星常驻武器 : 祭礼弓\n");
                        break;
                case 87:printf(" 四星常驻武器 : 西风猎弓\n");
                        break;
                case 88:printf(" 四星常驻武器 : 祭礼残章\n");
                        break;
                case 89:printf(" 四星常驻武器 : 西风秘典\n");
                        break;
                case 90:printf(" 四星常驻武器 : 匣里灭辰\n");
                        break;
                case 91:printf(" 四星常驻武器 : 祭礼大剑\n");
                        break;
                case 92:printf(" 四星常驻武器 : 西风大剑\n");
                        break;
                case 93:printf(" 四星常驻武器 : 祭礼剑\n");
                        break;
                case 84:printf(" 四星常驻武器 : 西风剑\n");
                        break;
                }
                four_baodi = 1;
            }
            four_i_num++;
            four_num=0;
            five_num++;
        }
        else
        {
            int d = rand()%13;
            switch (d)
            {
            case 0:printf(" 三星武器 : 弹弓\n");
                   break;
            case 1:printf(" 三星武器 : 鸦羽弓\n");
                   break;
            case 2:printf(" 三星武器 : 讨龙英杰谭\n");
                   break;
            case 3:printf(" 三星武器 : 黑缨枪\n");
                   break;
            case 4:printf(" 三星武器 : 沐浴龙血的剑\n");
                   break;
            case 5:printf(" 三星武器 : 飞天御剑\n");
                   break;      
            case 6:printf(" 三星武器 : 冷刃\n");
                   break;
            case 7:printf(" 三星武器 : 神射手之誓\n");
                   break;
            case 8:printf(" 三星武器 : 翡玉法球\n");
                   break;
            case 9:printf(" 三星武器 : 魔导绪论\n");
                   break;
            case 10:printf(" 三星武器 : 以理服人\n");
                   break;
            case 11:printf(" 三星武器 : 铁影阔剑\n");
                   break;
            case 12:printf(" 三星武器 : 黎明神剑\n");
                   break;
            }
            five_num++;
            four_num++;
        }
        if (five_num>=73)Five_role+=0.06;
    }

    printf("五星平均抽数为:%d\n",i_num/five_i_num);//打印五星平均抽数
    printf("up五星平均抽数为:%d\n",i_num/five_up_num);//打印up五星平均抽数
    printf("四星平均抽数为:%d\n",i_num/four_i_num);//打印四星平均抽数
    printf("up四星平均抽数为:%d\n",i_num/four_up_num);//打印up四星平均抽数
 

    return 0;
}
    